<template>
  <el-row :gutter="10">
    <el-col :span="24">
      <div class="edit_container" :class="{'mobile-editor': isMobile}">
        <quill-editor
          v-model="content"
          ref="myQuillEditor"
          :options="editorOption"
          @blur="onEditorBlur($event)"
          @focus="onEditorFocus($event)"
          @change="onEditorChange($event)"
        >
        </quill-editor>
      </div>
    </el-col>
  </el-row>
</template>

<script>
import { mapGetters, mapState } from "vuex";
import variables from "@/assets/styles/variables.scss";
export default {
  name: "Course",
  components: {},
  props: ["stem"],

  data() {
    return {
      content: `请输入知识点内容`,
      screenWidth: document.body.clientWidth,
      editorOption: {
        placeholder: "请在这里输入",
        modules: {
          toolbar: [
            ["bold", "italic", "underline", "strike"], //加粗，斜体，下划线，删除线
            ["blockquote", "code-block"], //引用，代码块
            // [{ header: 1 }, { header: 2 }], // 标题，键值对的形式；1、2表示字体大小
            [{ list: "ordered" }, { list: "bullet" }], //列表
            [{ script: "sub" }, { script: "super" }], // 上下标
            // [{ indent: "-1" }, { indent: "+1" }], // 缩进
            // [{ direction: "rtl" }], // 文本方向
            [{ size: ["small", false, "large", "huge"] }], // 字体大小
            // [{ header: [1, 2, 3, 4, 5, 6, false] }], //几级标题
            [{ color: [] }], // 字体颜色，字体背景颜色
            // [{ font: [] }], //字体
            [{ align: [] }], //对齐方式
            // ["clean"], //清除字体样式
            ["image", "video"], //上传图片、上传视频
          ],
        },
      },
    };
  },

  computed: {
    ...mapState(["settings"]),
    variables() {
      return variables;
    },
    theme() {
      return this.$store.state.settings.theme;
    },
    editor() {
      return this.$refs.myQuillEditor.quill;
    },
    isMobile() {
      return this.screenWidth < 768;
    },
    mobileToolbar() {
      return [
        ["bold", "italic", "underline"],
        [{ list: "ordered" }, { list: "bullet" }],
        [{ color: [] }],
        ["image"],
      ];
    }
  },

  watch: {
    stem: {
      handler: function (newValue) {
        this.content = newValue;
      },
      immediate: true,
    },
    isMobile: {
      handler: function(isMobile) {
        // 当移动状态变化时，更新编辑器工具栏
        if (this.editor) {
          const toolbar = isMobile ? this.mobileToolbar : this.editorOption.modules.toolbar;
          this.editor.getModule('toolbar').container.innerHTML = '';
          this.editor.getModule('toolbar').addControls(toolbar);
        }
      }
    }
  },

  created() {
    // 监听屏幕宽度变化
    window.addEventListener('resize', this.handleResize);
  },
  
  beforeDestroy() {
    // 移除监听器
    window.removeEventListener('resize', this.handleResize);
  },

  methods: {
    handleResize() {
      this.screenWidth = document.body.clientWidth;
    },
    onEditorReady(editor) {
      // 准备编辑器
    },
    getVal() {
      return this.content;
    },
    onEditorBlur() {
      this.$emit("changStem", this.content);
      // this.content = html;
      // console.log("子", this.content);
    }, // 失去焦点事件
    onEditorFocus() {}, // 获得焦点事件
    onEditorChange({ quill, html, text }) {}, // 内容改变事件
  },
};
</script>

<style lang="scss" scoped>
.edit_container {
  width: 100%;
  
  &.mobile-editor {
    /deep/ .ql-toolbar.ql-snow {
      padding: 5px;
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      
      .ql-formats {
        margin-right: 5px;
        margin-bottom: 5px;
      }
      
      button {
        width: 28px;
        height: 28px;
      }
    }
    
    /deep/ .ql-container.ql-snow {
      min-height: 150px;
      font-size: 16px;
      
      .ql-editor {
        padding: 10px;
        
        p {
          margin-bottom: 10px;
        }
      }
    }
  }
}
</style>

